package com.zmn.oms.dubbo.interfaces.wallquotation;

import com.zmn.common.dto2.ResponseDTO;
import com.zmn.oms.common.dio.wallquotation.WallOrderAmountDIO;
import com.zmn.oms.common.dro.quotation3.OrderAmountDRO;
import com.zmn.oms.common.dro.wallquotation.WallOrderAmountDRO;
import com.zmn.oms.common.dro.wallquotation.WallQuotationDetailDRO;
import com.zmn.oms.common.dro.wallquotation.WallQuotationServItemDRO;
import com.zmn.oms.common.enums.WallTypeEnum;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Positive;

/**
 * 墙面订单远程服务
 *
 * @author chengguang
 * @date 2022/05/24
 */
@Api(tags = "墙面报价查询接口")
@Valid
public interface WallQuotationListRemoteService {

    /**
     * 描述: 根据订单id和工单id获取墙面价格信息
     *
     * @param orderId 订单id
     * @param workId  工单id
     * @return {@link ResponseDTO }<{@link WallQuotationServItemDRO }>
     * @author chengguang
     * @since 2022/05/26
     */
    @ApiOperation(value = "根据订单id和工单id获取墙面价格信息", response = ResponseDTO.class)
    ResponseDTO<WallQuotationServItemDRO> getWallQuotationServItemByOrderIdAndWorkId(@ApiParam("订单Id") @NotNull(message = "orderId不能为空")
                                                                                     @Positive(message = "orderId必须大于0") Long orderId,
                                                                                     @ApiParam("工单id") @NotNull(message = "workId不能为空")
                                                                                     @Positive(message = "workId必须大于0") Long workId);

    /**
     * 描述: 根据订单id和工单id获取墙面报价详细信息
     *
     * @param orderId 订单id
     * @param workId  工单id
     * @return {@link ResponseDTO }<{@link WallQuotationDetailDRO }>
     * @author chengguang
     * @since 2022/05/26
     */
    @ApiOperation(value = "根据订单id获取墙面报价详细信息", response = ResponseDTO.class)
    ResponseDTO<WallQuotationDetailDRO> getWallQuotationDetailByOrderIdAndWorkId(@ApiParam("订单Id") @NotNull(message = "orderId不能为空")
                                                                        @Positive(message = "orderId必须大于0") Long orderId,
                                                                        @ApiParam("工单id") @NotNull(message = "workId不能为空")
                                                                        @Positive(message = "workId必须大于0") Long workId);

    /**
     * 描述: 计算墙面订单价格和优惠信息
     *
     * @param wallOrderAmountDIO 计算墙面订单价格入参
     * @return {@link ResponseDTO }<{@link OrderAmountDRO }>
     * @author chengguang
     * @since 2022/05/26
     */
    @ApiOperation(value = "计算墙面订单价格和优惠信息", response = ResponseDTO.class)
    ResponseDTO<WallOrderAmountDRO> getWallOrderAmount(@ApiParam("计算墙面订单价格入参") @NotNull(message = "wallOrderAmountDIO不能为空")
                                                               WallOrderAmountDIO wallOrderAmountDIO);


    /**
     * 描述: 是否墙面报价订单
     *
     * @param orderId 订单id
     * @param workId  工单id
     * @return {@link ResponseDTO }<{@link Boolean }>
     * @author chengguang
     * @since 2022/05/26
     */
    @ApiOperation(value = "是否墙面报价订单", response = ResponseDTO.class)
    ResponseDTO<WallTypeEnum> isWallQuotation(@ApiParam("订单Id") @NotNull(message = "orderId不能为空")
                                         @Positive(message = "orderId必须大于0") Long orderId,
                                              @ApiParam("工单id") @NotNull(message = "workId不能为空")
                                         @Positive(message = "workId必须大于0") Long workId);
}
